문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 리버스 엔지니어링 (문단 편집) === 방어법 === 클라이언트 컴퓨터에서 실행되는 프로그램의 리버싱을 막을 방법은 없다. [[CPU]]로 로드될 때는 반드시 [[기계어]]로 번역돼야 하기 때문에 기계어 코드를 직접 메모리에서 덤프떠서 리버싱하면 그만이기 때문이다. ~~물론 그게 절대 쉽다는건 아니다~~ 따라서 클라이언트에서 중요한 코드를 실행하지 않으면 된다. 서버에 중요 로직을 보관하고 API만 오픈한 경우에는 [[해킹]]을 하거나 서버 컴퓨터를 직접 찾아가서(...) 메모리를 덤프하지 않는 이상 코드를 리버싱할 방법이 없다. 그래서 요즘에는 중요한 코드를 [[서버]]에 두고, 소비자에게는 API만을 노출시켜 사용하게 하는 방법으로 리버싱을 방어하고 있다. 단점은 사용자가 항상 온라인 상태여야 한다는 것, 사용자가 늘어나면 서버 부하가 커진다는 등이다. 온라인 상태를 기대할 수 없는 애플리케이션은 여전히 암호화 기술을 사용한다. '''암호화''' 및 '''난독화''' 기술로 리버싱을 방해해서 지연시킨다. 실행 바이너리에 [[더미 데이터]]를 집어넣어 분석을 어렵게 만들고, 같은 기능을 하는 여러 함수를 일부러 중복 작성하거나 변수나 함수명을 읽기 힘들게 바꾸는 식으로 분석 난이도를 높이는 방법도 있다.[* 이 작업은 보통 컴파일 직전에 특정 도구를 사용해서 수행한다.] 그러나 리버싱 도구도 같이 발전해서 난독화된 코드의 패턴을 분석해 중복 작성된 함수의 중복을 제거하고 변수명을 추정하여 명명해 주고 바이너리 데이터를 이미 소스 코드가 알려진 다른 프로그램과 매칭시켜 손상된(난독화된) 코드를 상당한 수준으로 복원해내고 있기 때문에 들이는 노력에 비해 난이도는 별로 올라가지 않는다. 특히 현대의 프로그램은 오픈 소스 라이브러리에 크게 의존하기 때문에 그만큼 복원률도 높은 편이다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기